package cz.cuni.mff.abacs.burglar.logics.planning;

import cz.cuni.mff.abacs.burglar.logics.GameMap;
import cz.cuni.mff.abacs.burglar.logics.objects.agents.Guard;
import cz.cuni.mff.abacs.burglar.logics.planning.instructions.Instruction;
import java.util.List;


/**
 * Handler of an external planner implementation to solve a problem.
 * 
 * @author abacs
 *
 */
public interface PlannerHandler {
	
	
	/**
	 * If the list of instructions is empty, the planning was unsuccessful.
	 * 
	 * @param map game world
	 * @param roomsToEnter rooms that needs to be included in the path
	 * @param roomsToAvoid rooms that needs to be avoided in the path
	 * @return resulted instructions
	 */
	public List<Instruction> solveBurglarProblem(
			GameMap map,
			List<Integer> roomsToEnter,
			List<Integer> roomsToAvoid
	);
	
	
	/**
	 * If the list of instructions is empty, the planning was unsuccessful.
	 * 
	 * @param guard the selected agent to plan for
	 * @param map game world
	 * @param roomsToEnter rooms that needs to be included in the path
	 * @param roomsToAvoid rooms that needs to be avoided in the path
	 * @return resulted instructions
	 */
	public List<Instruction> solveGuardProblem(
			Guard guard,
			GameMap map,
			List<Integer> roomsToEnter,
			List<Integer> roomsToAvoid
	);
	
	
}
